package com.example.aspect;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.stereotype.Component;

@Slf4j
//@Aspect
//@Component
public class ExecutionAspect2 {

    /**
     * 切入点表达式的定义方式：
     * 方法一：直接在方法上写表达式（不推荐重复使用）
     * 方法二：使用@Pointcut抽取表达式（推荐）
     */
    @Pointcut("execution(* com.example.service.impl.StudentServiceImpl.*(..))")
    public void callMethod() {
    }

    @Before("callMethod()")
    public void before() {
        log.info("before");
    }

    @After("callMethod()")
    public void after() {
        log.info("after");
    }

    @Around("callMethod()")
    public Object around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        log.info("around before");
        Object result = proceedingJoinPoint.proceed();
        log.info("around after");
        return result;
    }

}
